Sistema de Nombrado en Java (JNDI) [Parte I]

Adem�s de especificar una b�squeda usando un grupo de atributos, podemos especificarla en la forma de un filtro de b�squeda. Un filtro de b�squeda es una consulta expresada en la forma de una expresi�n l�gica. La s�ntaxis de todos los filtros aceptados por DirContext.search() se describe en la RFC 2254.

El siguiente filtro de b�squeda especifica que las entradas cualificadas deben tener un atributo "sn" con un valor de "Geisel" y un atributo "mail" con cualquier valor.

(&(sn=Geisel)(mail=*))

El siguiente c�digo crea un filtro y los controles de b�squeda por defecto SearchControls, y los usa para realizar la b�squeda. La b�squeda es equivalente a la presentada en el ejemplo de la p�gina anterior.

// Create the default search controls
SearchControls ctls = new SearchControls();

// Specify the search filter to match
// Ask for objects that have the attribute "sn" == "Giesel"
// and the "mail" attribute
String filter = "(&(sn=Geisel)(mail=*))";

// Search for objects using the filter
NamingEnumeration answer = ctx.search("ou=People", filter, ctls);

Ejecutar este ejemplo produce esta salida.

# java SearchWithFilterRetAll
>>>cn=Ted Geisel
attribute: sn
value: Geisel
attribute: objectclass
value: top
value: person
value: organizationalPerson
value: inetOrgPerson
attribute: jpegphoto
value: [B@1dacd75e
attribute: mail
value: [email protected]
attribute: facsimiletelephonenumber
value: +1 408 555 2329
attribute: cn
value: Ted Geisel
attribute: telephonenumber
value: +1 408 555 5252

.�R�pida Visi�n de la S�ntaxis de los Filtros de B�squeda

La s�ntaxis del filtro de b�squeda es b�sicamente una expresi�n l�gica en notaci�n de prefijo, (es decir, los operadores l�gicos aparecen antes de los argumentos). La siguiente tabla lista los s�mbolos usados para crear filtros.

S�mbolo Descripci�n
& conjunci�n (es decir, and -- todos los de la lista deben ser ciertos)
| disjunci�n (es decir, or --una o m�s alternativas deben ser ciertas)
! negaci�n (es decir, not -- el �tem que est� siendo negado no debe ser cierto)
= igualdad (de acuerdo a la regla de correspondencia del atributo)
~= aproximadamente igual (de acuerdo a la regla de correspondencia del atributo)
>= mayor que (de acuerdo a la regla de correspondencia del atributo)
<= menor que (de acuerdo a la regla de correspondencia del atributo)
=* presencia (es decir, la entrada debe tener el atributo, pero su valor es irrelevante)
* comod�n (indica cero o m�s caracteres que pueden ocurrir en esa posici�n), se utiliza cuando se especifican atributos para su correspondencia
\ escape (para escapar '*', '(', or ')' cuando ocurren dentro del valor del un atributo)

Cada �tem del filtro est� compuesto usando un identificador de atributo y un valor de atributo o s�mbolos que denotan el valor del atributo. Por ejemplo, el �tem "sn=Geisel" significa que el atributo "sn" debe tener el valor de atributo "Geisel" y el �tem "mail=*" indica que el aributo "mail" s�lo debe estar presente.

Cada �tem debe estar encerrado entre par�ntesis, como en "(sn=Geisel)".

Estos �tems se componen usando operadores l�gicos como "&" (conjunci�n) para crear operaciones l�gicas, como en "(& (sn=Geisel) (mail=*))".

Cada expresi�n l�gica puede estar compuesta por otros �tems que a su vez pueden ser otras expresiones l�gicas, como en "(| (& (sn=Geisel) (mail=*)) (sn=L*))". Este �ltimo ejemplo solicita las entradas que tiene el atributo "sn" de "Geisel" y el atributo "mail" o cuya entrada "sn" empieza con la letra "L."

Para una completa descripci�n de la s�ntaxis puedes ver la RFC 2254.

.�Devolver los Atributos Seleccionados

El ejemplo anterior devolv�a todos los atributos asociados con las entradas que cumpl�an con el filtro especificado. Podemos seleccionar los atributos a devolver seleccionando los argumentos de control de b�squeda. Podemos crear un array de identificadores de atributos que queremos incluir en el resultado y pasarlo a SearchControls.setReturningAttributes().

(Los controles de b�squeda se describen en la siguiente secci�n.) Aqu� tenemos un ejemplo.

// Specify the ids of the attributes to return
String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);

Este ejemplo es equivalente al ejemplo Devolver Atributos Seleccionados de la p�gina anterior. Al ejecutar el ejemplo se produce la siguiente salida. (La entrada no tiene un atributo "golfhandicap", por eso no se devuelve).

# java SearchWithFilter
>>>cn=Ted Geisel
attribute: sn
value: Geisel
attribute: mail
value: [email protected]
attribute: telephonenumber
value: +1 408 555 5252

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO